/*
 * @(#)ListSplitter.java 2021年4月8日
 *
 * Copyright (c) 2010 by rayootech.com. All rights reserved.
 */
package com.nuctech.common.utils;

import java.util.Iterator;
import java.util.List;

/**
 * List对象进行分割器
 * 
 * @author lilu
 * @date 2021年4月8日
 * @since 1.0.0
 */
public class ListSplitter<T> implements Iterator<List<T>> {

	/** 所有列表 **/
	private final List<T>	list;

	/** 多少数据进行分割 **/
	private final int		size;

	/** 已经分割的索引 **/
	private int				currIndex;

	/**
	 * 构造器
	 * 
	 * @author lilu
	 * @date 2021年4月8日 上午11:43:20
	 * @since 1.0.0
	 * 
	 * @param list 所有列表
	 * @param size 分割数量
	 */
	public ListSplitter(List<T> list, int size) {
		this.list = list;
		this.size = size;
	}

	/**
	 * 检查是否还存在后续数据
	 * 
	 * @author lilu
	 * @date 2021年4月8日 上午11:44:32
	 * @since 1.0.0
	 * 
	 * @return
	 */
	@Override
	public boolean hasNext() {
		return this.currIndex < this.list.size();
	}

	/**
	 * 获取分割数据段
	 * 
	 * @see java.util.Iterator#next()
	 */
	@Override
	public List<T> next() {
		int nextIndex = this.currIndex;
		int totalSize = 0;

		for (; nextIndex < this.list.size(); nextIndex++) {
			T t = this.list.get(nextIndex);
			totalSize = totalSize + t.toString().length();
			if (totalSize > this.size) {
				break;
			}
		}

		List<T> subList = this.list.subList(this.currIndex, nextIndex);
		this.currIndex = nextIndex;

		return subList;
	}

}
